module vga_top (
        input			wire						clk,// 时钟输入
        input			wire						rst_n,// 复位信号，低电平有效
        input			wire		[ 2:0 ]		    key,// 三个按键输入

        output			wire						vga_clk, // VGA时钟输出
        output			wire						h_sync,// 水平同步信号
        output			wire						v_sync,// 垂直同步信号
        output			wire		[ 4:0 ]			rgb_r,// 红色分量输出
        output			wire		[ 5:0 ]			rgb_g,// 绿色分量输出
        output			wire		[ 4:0 ]			rgb_b,// 蓝色分量输出
        output			reg		    [ 3:0 ]			led

);// LED输出


// 内部信号声明
reg			[ 27:0 ]			cnt			        ;  // 计数器

wire		[ 11:0 ]		    addr_h              ;  // 水平地址
wire		[ 11:0 ]		    addr_v              ;  // 垂直地址

wire		[ 15:0 ]			rgb_data			;  // 用于RGB数据的16位宽线


wire		[ 2:0 ]			    key_flag			;  // 按键标志
wire		[ 2:0 ]			    key_value			;  // 按键值


wire    [3:0]      key_out              ;//从FSM_KEY输出的按键


// /*

// VGA驱动模块实例化
vga_dirve u_vga_dirve(
//in
.clk      ( clk ),
.rst_n    ( rst_n ),
.rgb_data ( rgb_data ),

//out
.vga_clk  ( vga_clk ),
.h_sync   ( h_sync ),
.v_sync   ( v_sync ),
.rgb_r    ( rgb_r ),
.rgb_g    ( rgb_g ),
.rgb_b    ( rgb_b ),
.addr_h   ( addr_h ),
.addr_v   ( addr_v )
);

// 数据驱动模块实例化
data_drive u_data_drive(
//in
.vga_clk ( vga_clk ),
.rst_n   ( rst_n ),
.addr_h  ( addr_h ),
.addr_v  ( addr_v ),
.key     ( {key_value[ 2 ] && key_flag[ 2 ], key_value[ 1 ] && key_flag[ 1 ], key_value[ 0 ] && key_flag[ 0 ] } ),

//out
.rgb_data  ( rgb_data )
);

// */



// /*
// 按键消抖模块实例化
key_debounce u_key_debounce0(
//in
.clk   ( vga_clk ),
.rst_n ( rst_n ),
.key   ( key[ 0 ] ),

//out
.flag  ( key_flag[ 0 ] ),
.key_value  ( key_value[ 0 ] )
);

key_debounce u_key_debounce1(
//in
.clk   ( vga_clk ),
.rst_n ( rst_n ),
.key   ( key[ 1 ] ),

//out
.flag  ( key_flag[ 1 ] ),
.key_value  ( key_value[ 1 ] )
);

key_debounce u_key_debounce2(
.clk   ( vga_clk ),
.rst_n ( rst_n ),
.key   ( key[ 2 ] ),
.flag  ( key_flag[ 2 ] ),
.key_value  ( key_value[ 2 ] )
);
// */

/*
// 按键部分
FSM_KEY     inst_FSM_KEY(
        // in
        .sys_clk     (vga_clk   ),
        .sys_rst_n   (rst_n ),
        .key_in      (key       ),//输入的按键

        // out
        .key_out     (key_out   )
);
*/


/*
led_ctrl    led_ctrl_inst(
//in
        .sys_clk        (vga_clk    ),
        .sys_rst_n      (sys_rst_n  ),

//out
        .led            (led        )
);
*/

// /*
//LED闪烁逻辑
always @( posedge clk or negedge rst_n ) begin
    if ( !rst_n ) begin
        cnt <= 0;// 复位时计数器清零
    end
    else if ( cnt == 50_000_000 - 1 ) begin
        cnt <= 0; // 计数到一定值后清零
    end
    else begin
        cnt <= cnt + 1;// 否则计数器递增
    end
end


always @( posedge clk or negedge rst_n ) begin
    if ( !rst_n ) begin
        led <= 4'b1111;// 复位时LED清零
    end
    else if ( cnt == 50_000_000 -1 )begin
        led <= ~led;// 计数到一定值后LED
    end
    else begin
        led <= led; // 否则保持LED状态不变
    end
end

// */


endmodule // vga_top
